package com.ruoyi.rycc.service.impl;

import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.rycc.domain.CcCourse;
import com.ruoyi.rycc.domain.CcSubjectCourse;
import com.ruoyi.rycc.mapper.CcCourseMapper;
import com.ruoyi.rycc.mapper.CcSubjectCourseMapper;
import com.ruoyi.rycc.service.ICcCourseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 课程管理Service业务层处理
 *
 * @author antg
 * @date 2021-09-04
 */
@Service
public class CcCourseServiceImpl implements ICcCourseService {
    @Autowired
    private CcCourseMapper ccCourseMapper;
    @Autowired
    private CcSubjectCourseMapper ccSubjectCourseMapper;

    /**
     * 查询课程管理
     *
     * @param id 课程管理主键
     * @return 课程管理
     */
    @Override
    public CcCourse selectCcCourseById(Integer id) {
        return ccCourseMapper.selectCcCourseById(id);
    }

    /**
     * 查询课程管理列表
     *
     * @param ccCourse 课程管理
     * @return 课程管理
     */
    @Override
    public List<CcCourse> selectCcCourseList(CcCourse ccCourse) {
        return ccCourseMapper.selectCcCourseList(ccCourse);
    }

    /**
     * 新增课程管理
     *
     * @param ccCourse 课程管理
     * @return 结果
     */
    @Transactional(rollbackFor = Exception.class)
    @Override
    public int insertCcCourse(CcCourse ccCourse) {
        SysUser user = ShiroUtils.getSysUser();
        ccCourse.setCreateBy(user.getUserName());
        ccCourse.setCreateTime(DateUtils.getNowDate());
        int result = 0;
        try {
            result = ccCourseMapper.insertCcCourse(ccCourse);
            //插入成功后插入关联表数据
            String subjectIds = ccCourse.getSubjectIds();
            String[] ids = subjectIds.split(",");
            for (int i = 0; i < ids.length; i++) {
                CcSubjectCourse ccSubjectCourse = new CcSubjectCourse();
                ccSubjectCourse.setCourseId(ccCourse.getId());
                ccSubjectCourse.setSubjectId(Integer.parseInt(ids[i]));
                ccSubjectCourseMapper.insertCcSubjectCourse(ccSubjectCourse);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     * 修改课程管理
     *
     * @param ccCourse 课程管理
     * @return 结果
     */
    @Transactional(rollbackFor = Exception.class)
    @Override
    public int updateCcCourse(CcCourse ccCourse) {
        SysUser user = ShiroUtils.getSysUser();
        ccCourse.setUpdateBy(user.getUserName());
        ccCourse.setUpdateTime(DateUtils.getNowDate());
        int result = 0;
        try {
            result = ccCourseMapper.updateCcCourse(ccCourse);
            //更新成功后首先将对应的关联数据删除
            ccSubjectCourseMapper.deleteCcSubjectCourseByCourseId(ccCourse.getId());
            //然后插入新的数据
            String subjectIds = ccCourse.getSubjectIds();
            String[] ids = subjectIds.split(",");
            for (int i = 0; i < ids.length; i++) {
                CcSubjectCourse ccSubjectCourse = new CcSubjectCourse();
                ccSubjectCourse.setCourseId(ccCourse.getId());
                ccSubjectCourse.setSubjectId(Integer.parseInt(ids[i]));
                ccSubjectCourseMapper.insertCcSubjectCourse(ccSubjectCourse);
            }
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     * 批量删除课程管理
     *
     * @param ids 需要删除的课程管理主键
     * @return 结果
     */
    @Override
    public int deleteCcCourseByIds(String ids) {
        return ccCourseMapper.deleteCcCourseByIds(Convert.toStrArray(ids));
    }

    /**
     * 删除课程管理信息
     *
     * @param id 课程管理主键
     * @return 结果
     */
    @Override
    public int deleteCcCourseById(Integer id) {
        return ccCourseMapper.deleteCcCourseById(id);
    }
}
